package br.com.sysponto.servlet;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.ByteArrayOutputStream;

import br.com.sysponto.dao.ColaboradorDAO;
import br.com.sysponto.vo.ColaboradorVO;

/**
 * Servlet implementation class NovoColaboradorServlet
 */
public class NovoColaboradorServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public NovoColaboradorServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	/* (non-Javadoc)
	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		 PrintWriter out = response.getWriter();
		
		 DiskFileItemFactory dfif = new DiskFileItemFactory ();
		 
		 ServletFileUpload sfu = new ServletFileUpload(dfif);
		 
		 try {
			 
			 List item =  sfu.parseRequest(request);
			 
			 //nome
			 FileItem nomeFI = (FileItem)item.get(0);
			 String nome;
			 
			 if (nomeFI.getString().trim().equals("")) {
				 nome = "";
			 }else 
				 nome = nomeFI.getString();
			 
			 //endereço
			 
			 FileItem enderecoFI = (FileItem) item.get(1);
			 String endereco;
			 
			 if (enderecoFI.getString().trim().equals("")) {
				 endereco = "";
			 }else
				 endereco = enderecoFI.getString();
			 
			 FileItem cepFI = (FileItem) item.get(2);
			 int cep;
			 
			 if (cepFI.getString().trim().equals("")) {
				 cep = 0;
				 
			 }else
				 
				 cep = Integer.parseInt(cepFI.getString());
			 
			 FileItem cpfFI = (FileItem) item.get(3);
			 String cpf;
			 
			 if (cpfFI.getString().equals("")) {
				 cpf = "";
				 
			 }else
				 cpf = cpfFI.getString();
			 
			 
			 FileItem identificacaoFI = (FileItem) item.get(4);
			 String identificacao;
			 
			 if (identificacaoFI.getString().trim().equals("")) {
				 identificacao = "";
			 }else
				 identificacao = identificacaoFI.getString();
			 
			 
			 FileItem cursoFI = (FileItem) item.get(5);
			 String curso;
			 
			 if (cursoFI.getString().trim().equals("")) {
				 curso = "";
			 }else 
				 curso = cursoFI.getString();
			 
			 
			 FileItem telefoneFI = (FileItem) item.get(6);
			 int telefone;
			 
			 if (telefoneFI.getString().trim().equals("")) {
				 telefone = 0;
			 }else
				 telefone = Integer.parseInt(telefoneFI.getString());
			 
			 
			 FileItem emailPessoalFI = (FileItem) item.get(7);
			 String emailPessoal;
			 
			 if (emailPessoalFI.getString().trim().equals("")) {
				 emailPessoal = "";
			 }else 
				 emailPessoal = emailPessoalFI.getString();
			 
			 FileItem emailEditoraFI = (FileItem) item.get(8);
			 String emailEditora;
			 
			 if (emailEditoraFI.getString().trim().equals("")) {
				 emailEditora = "";
			 }else 
				 emailEditora = emailEditoraFI.getString();
			 
			 FileItem nomeBancoFI = (FileItem) item.get(9);
			 String nomeBanco;
			 
			 if (nomeBancoFI.getString().trim().equals("")) {
				 nomeBanco = "";
			 }nomeBanco = nomeBancoFI.getString();
			 
			 
			 FileItem agenciaFI= (FileItem) item.get(10);
			 int agencia;
			 
			 if (agenciaFI.getString().trim().equals("")) {
				 agencia = 0;
			 }else 
				 agencia = Integer.parseInt(agenciaFI.getString());
			 
			 FileItem tipoContaFI = (FileItem) item.get(11);
			 String tipoConta;
			 
			 if (tipoContaFI.getString().trim().equals("")) {
				 tipoConta = "";
			 }else 
				 tipoConta = tipoContaFI.getString();
			 
			 
			 FileItem numeroAgenciaFI = (FileItem) item.get(12);
			 int numeroAgencia;
			 if (numeroAgenciaFI.getString().trim().equals("")) {
				 numeroAgencia = 0;
			 }else
				 numeroAgencia = Integer.parseInt(numeroAgenciaFI.getString());
			 
			 
			 FileItem loginFI = (FileItem) item.get(13);
			 String login;
			 
			 if (loginFI.getString().trim().equals("")) {
				 login = "";
			 }else
				 login = loginFI.getString();
			 
			 FileItem senhaFI = (FileItem) item.get(14);
			 String senha;
			 
			 if (senhaFI.getString().trim().equals("")) {
				 senha = "";
				 
			 }else
				 senha = senhaFI.getString();
			 
			 
			 FileItem confirmaSenhaFI = (FileItem) item.get(15);
			 String confirmaSenha;
			 
			 if (confirmaSenhaFI.getString().trim().equals("")) {
				 confirmaSenha = "";
				 
			 }else
				 confirmaSenha = confirmaSenhaFI.getString();
			 
			 
			  FileItem arquivoExtra1FI = (FileItem) item.get(16);
			  String nomeArquivoExtra1;
			  byte [] arquivoExtra1Byte;
			 
			 if (arquivoExtra1FI.getName().isEmpty()) {
				 arquivoExtra1FI.delete();
				 nomeArquivoExtra1 = "";
				 
			 }else
				 nomeArquivoExtra1 = arquivoExtra1FI.getName().toString(); {
			 	 arquivoExtra1Byte = read(arquivoExtra1FI);
			 
				 }
				 
			 FileItem arquivoExtra2FI = (FileItem) item.get(17);
			 String nomeArquivoExtra2;
		     byte [] arquivoExtra2Byte;

			 
			 if (arquivoExtra2FI.getName().isEmpty()) {
				 arquivoExtra2FI.delete();
				 nomeArquivoExtra2 = "";
				 
			 }else
				 nomeArquivoExtra2 = arquivoExtra2FI.getName().toString(); {
			     arquivoExtra2Byte = read(arquivoExtra2FI);
				}
			 
			 FileItem arquivoExtra3FI = (FileItem) item.get(18);
			 String nomeArquivoExtra3;
		     byte [] arquivoExtra3Byte;
			 
			 if (arquivoExtra3FI.getName().isEmpty()) {
				 arquivoExtra3FI.delete();
				 nomeArquivoExtra3 = "";
			

				 
			 }else
				 nomeArquivoExtra3 = arquivoExtra3FI.getName().toString(); {
			     arquivoExtra3Byte = read(arquivoExtra3FI);	 
		      }
				 
			 FileItem nomeArquivoExtra4FI = (FileItem) item.get(19);
			 String nomeArquivoExtra4;
		     byte [] arquivoExtra4Byte = read(nomeArquivoExtra4FI);

			 
			 if (nomeArquivoExtra4FI.getName().isEmpty()) {
				 nomeArquivoExtra4FI.delete();
				 nomeArquivoExtra4 = "";
				 
			 }else
				 nomeArquivoExtra4 = nomeArquivoExtra4FI.getName().toString(); {
			     arquivoExtra4Byte = read(nomeArquivoExtra4FI);
		     }
			 
			 
			 FileItem arquivoExtra5FI = (FileItem) item.get(20);
			 String nomeArquivoExtra5;
		     byte [] arquivoExtra5Byte = read(arquivoExtra5FI);

			 
			 if (arquivoExtra5FI.getName().isEmpty()) {				
				 arquivoExtra5FI.delete();
				nomeArquivoExtra5 = "";
				 
			 }else
				 nomeArquivoExtra5 = arquivoExtra5FI.getName().toString(); {
			     arquivoExtra5Byte = read(arquivoExtra5FI);
				 }
			 
			 
			 FileItem arquivoExtra6FI = (FileItem) item.get(21);
			 String nomeArquivoExtra6;
		     byte [] arquivoExtra6Byte = read(arquivoExtra6FI);

			 
			 if (arquivoExtra6FI.getName().isEmpty()) {
				 arquivoExtra6FI.delete();
				 nomeArquivoExtra6 = "";
				 
			 }else
				 nomeArquivoExtra6 = arquivoExtra6FI.getName().toString(); {
			      arquivoExtra6Byte = read(arquivoExtra6FI);
				 }
			 
			 
			 FileItem arquivoExtra7FI = (FileItem) item.get(22);
			 String nomeArquivoExtra7;
		     byte [] arquivoExtra7Byte = read(arquivoExtra7FI);

			 
			 if (arquivoExtra7FI.getName().isEmpty()) {
				 arquivoExtra7FI.delete();
				 nomeArquivoExtra7 = "";
				 
			 }else
				 nomeArquivoExtra7 = arquivoExtra7FI.getName().toString(); {
			     arquivoExtra7Byte = read(arquivoExtra7FI);
				 }
			 
			 FileItem arquivoExtra8FI = (FileItem) item.get(23);
			 String nomeArquivoExtra8;
		     byte [] arquivoExtra8Byte = read(arquivoExtra8FI);

			 
			 
			 if (arquivoExtra8FI.getName().isEmpty()) {
				 arquivoExtra8FI.delete();
				 nomeArquivoExtra8 = "";
				 
			 }else
				 nomeArquivoExtra8 = arquivoExtra8FI.getName().toString(); {
			     arquivoExtra8Byte = read(arquivoExtra8FI);
				}
			 
			 FileItem arquivoExtra9FI = (FileItem) item.get(24);
			 String nomeArquivoExtra9;
		     byte [] arquivoExtra9Byte = read(arquivoExtra9FI);

			 
			 if (arquivoExtra9FI.getName().isEmpty()) {
				 arquivoExtra9FI.delete();
				 nomeArquivoExtra9 = "";
				 
			 }else {
				 nomeArquivoExtra9 =arquivoExtra9FI.getName().toString();
			     arquivoExtra9Byte = read(arquivoExtra9FI);
			 
			 }
			 FileItem arquivoExtra10FI = (FileItem) item.get(25);
			 String nomeArquivoExtra10 = "";
		     byte [] arquivoExtra10Byte = read(arquivoExtra10FI);

			 
			 if (arquivoExtra10FI.getName().isEmpty()) {
				 arquivoExtra10FI.delete();
				 nomeArquivoExtra10 = "";

				 
			 }else {
				 nomeArquivoExtra10 = arquivoExtra10FI.getName().toString();
			     arquivoExtra10Byte = read(arquivoExtra10FI);
			 }
			 
			 //testes
			 
			 out.println("nome: "+nome);
			 out.println("endereço: "+endereco);
			 out.println("cep: "+cep);
			 out.println("cpf: "+cpf);
			 out.println("identificacao: "+identificacao);
			 out.println("curso: "+curso);
			 out.println("telefone: "+telefone);
			 out.println("emailPessoal: "+emailPessoal);
			 out.println("emailEditora: "+emailEditora);
			 out.println("nomeBanco: "+nomeBanco);
			 out.println("agencia: "+agencia);
			 out.println("tipoConta: "+tipoConta);
			 out.println("numeroAgencia: "+numeroAgencia);
			 out.println("login: "+login);
			 out.println("senha: "+senha);
			 out.println("confima senha: "+confirmaSenha);
		 	 out.println("arquivo extra1: "+nomeArquivoExtra1);
		 	 out.println("arquivo extra2: "+nomeArquivoExtra2);
		 	 out.println("arquivo extra3: "+nomeArquivoExtra3);
		 	 out.println("arquivo extra4: "+nomeArquivoExtra4);
		 	 out.println("arquivo extra5: "+nomeArquivoExtra5);
		 	 out.println("arquivo extra6: "+nomeArquivoExtra6);
		 	 out.println("arquivo extra7: "+nomeArquivoExtra7);
		 	 out.println("arquivo extra8: "+nomeArquivoExtra8);
		 	 out.println("arquivo extra9: "+nomeArquivoExtra9);
		 	 out.println("arquivo extra10: "+nomeArquivoExtra10);
		 	 

			 
		 	 if (nome.equals("") || endereco.equals("") || cpf.equals("") ||
		 			 curso.equals("") || cep == 0 || identificacao.equals("") ||
		 			 telefone == 0 || emailPessoal.equals("") || nomeBanco.equals("") || agencia == 0 || tipoConta.equals("") || 
		 			 numeroAgencia == 0 || login.equals("") || senha.equals("") ) {
		 		 
		 		 response.sendRedirect("novocolaborador.jsp?msg=erroCampos");
		 	 }else if (!senha.equals(confirmaSenha)) {
		 		 response.sendRedirect("novocolaborador.jsp?msg=erroSenha");
		 	 }else {
		 		
		 		 ColaboradorVO colaboradorVO = new ColaboradorVO ();
		 		 
		 		 colaboradorVO.setNome(nome);
		 		 colaboradorVO.setEndereco(endereco);
		 		 colaboradorVO.setCpf(cpf);
		 		 colaboradorVO.setCurso(curso);
		 		 colaboradorVO.setCep(cep);
		 		 colaboradorVO.setIdentificacao(identificacao);
		 		 colaboradorVO.setTelefone(telefone);
		 		 colaboradorVO.setEmailPessoal(emailPessoal);
		 		 colaboradorVO.setEmailEditora(emailEditora);	
		 	
		 		 colaboradorVO.setNomeBanco(nomeBanco);
		 		 colaboradorVO.setAgencia(agencia);
		 		 colaboradorVO.setTipoConta(tipoConta);
		 		 colaboradorVO.setNumeroAgencia(numeroAgencia);
		 		 
		 		 colaboradorVO.setLogin(login);
		 		 colaboradorVO.setSenha(senha);
		 		 colaboradorVO.setArquivo1(arquivoExtra1Byte);
		 		 colaboradorVO.setNomeArquivo1(nomeArquivoExtra1);
		 		 colaboradorVO.setArquivo2(arquivoExtra2Byte);
		 		 colaboradorVO.setNomeArquivo2(nomeArquivoExtra2);
		 		 colaboradorVO.setArquivo3(arquivoExtra3Byte);
		 		 colaboradorVO.setNomeArquivo3(nomeArquivoExtra3);
		 		 colaboradorVO.setArquivo4(arquivoExtra4Byte);
		 		 colaboradorVO.setNomeArquivo4(nomeArquivoExtra4);
		 		 colaboradorVO.setArquivo5(arquivoExtra5Byte);
		 		 colaboradorVO.setNomeArquivo5(nomeArquivoExtra5);
		 		 colaboradorVO.setArquivo6(arquivoExtra6Byte);
		 		 colaboradorVO.setNomeArquivo6(nomeArquivoExtra6);
		 		 colaboradorVO.setArquivo7(arquivoExtra7Byte);
		 		 colaboradorVO.setNomeArquivo7(nomeArquivoExtra7);
		 		 colaboradorVO.setArquivo8(arquivoExtra8Byte);
		 		 colaboradorVO.setNomeArquivo8(nomeArquivoExtra8);
		 		 colaboradorVO.setArquivo9(arquivoExtra9Byte);
		 		 colaboradorVO.setNomeArquivo9(nomeArquivoExtra9);
		 		 colaboradorVO.setArquivo10(arquivoExtra10Byte);
		 		 colaboradorVO.setNomeArquivo10(nomeArquivoExtra10);

		 		 
		 		ColaboradorDAO colaboradorDao = new ColaboradorDAO();
		 		colaboradorDao.inserir(colaboradorVO);


		 		 response.sendRedirect("novocolaborador.jsp?msg=sucesso");
		 		 
		 	 }
		 	 
		 	 
			 
		 }catch (FileUploadException ex) {
			 
			response.sendRedirect("novocolaborador.jsp?msg=erroCampos");
			 
		 }catch (IndexOutOfBoundsException ex) {
		   response.sendRedirect("novocolaborador.jsp?msg=erroCampos");

		 }

		
	}

	private byte[] read(FileItem fi) throws IOException {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		InputStream is = fi.getInputStream();
		int read = 0;
		final byte[] b = new byte[1024];

		while ((read = is.read(b)) != -1) {
			out.write(b, 0, read);
		}
		return out.toByteArray();
	}
}
